from builtins import print as _print
from sys import _getframe


# 自定义print函数 方便输出时候带上行号
def print(*arg, **kw):
	s = f'第{_getframe(1).f_lineno}行：'  # 注此处需加参数 1。
	return _print(s, *arg, **kw)


# ### 列表的相关操作
lst1 = ["孟凡伟", "康与众"]
lst2 = ["康与众", "张宇"]
# (1)列表的拼接   (同元组)
res = lst1 + lst2
print(res)

# (2)列表的重复   (同元组)
res = lst1 * 3
print(res)

# (3)列表的切片   (同元组)
"""
语法 => 列表[::]  完整格式：[开始索引:结束索引:间隔值]
	(1)[开始索引:]  从开始索引截取到列表的最后
	(2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
	(3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
	(4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
	(5)[:]或[::]  截取所有列表
"""
lst = ["孟凡伟", "康与众", "张宇", "赵沈阳", "需保障", "梁新宇", "沈思雨"]
# (1)[开始索引:]  从开始索引截取到列表的最后
res = lst[2:]
print(res)

# (2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
res = lst[:3]
print(res)

# (3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
res = lst[3:5]
print(res)

# (4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
# 正向截取
res = lst[::5]
print(res)  # 0 5 10
# 逆向截取
res = lst[::-3]  # -1 -4 -7
print(res)

# (5)[:]或[::]  截取所有列表
res = lst[:]
res = lst[::]
print(res)

# (4)列表的获取   (同元组)
#       0  1  2
lst = [10, 20, 30]
#     -3  -2 -1
print(lst[-1])

# (5)列表的修改   ( 可切片 )
lst = ["孟凡伟", "康与众", "张宇", "赵沈阳", "需保障", "梁新宇", "沈思雨"]
# 改单个值
lst[1] = "陈璐"
print(lst)

# 1.改多个值 (如果使用切片进行修改,要求数据必须是Iterable可迭代性数据)
# lst[1:4] = ["孙悟空","猪八戒","白骨精"]
lst[1:4] = "你好"
print(lst)

# 2.改多个值(带有步长)
"""带有步长的切片修改,切出几个元素就修改几个元素,数量要一致."""
lst = ["孟凡伟", "康与众", "张宇", "赵沈阳", "需保障", "梁新宇", "沈思雨"]
"""0 3 6 """
lst[::3] = "abc"
# lst[::3] = "ab" error
print(lst)

# (6)列表的删除   ( 可切片 )
lst = ["孟凡伟", "康与众", "张宇", "赵沈阳", "需保障", "梁新宇", "沈思雨"]
# 1.一次删一个
# del lst[2]
# print(lst)

# 2.一次删一堆
del lst[1:-1]
print(lst)

# 3.注意点
# res = lst[1:-1]
# del res  # 删除的是res这个变量 和 列表无关
# print(lst)

# 额外的注意点
tup = (1, 2, 3, 4, [10, 11, 12])
print(tup[-1])
tup[-1][-1] = 13
print(tup)
